home *** CD-ROM | disk | FTP | other *** search
- This is a set of C++ source code to allow PC programmers to make use of the
- Sound Blaster card, in particular the digitised sample recording and playback
- modes. It uses classes so that your code can be independent of the particular
- sound driver being used; the only driver included is for the SB card but it
- is easy to add others. The driver supports version 2.0 of the Sound Blaster,
- meaning that you can achieve a 44kHz playback rate and can record at 15kHz.
- A feature of the software is that it supports double-buffered DMA routines
- implemented within a single memory area - basically this means you can have
- continuous playback (or recording) while doing something else, (accessing
- the disk, updating the screen, etc).
-
- The device-independent class is called SoundDevice. As well as providing
- virtual functions for access to derived classes, it contains two useful
- functions of its own. The first is file_dma, which lets you play sound files
- of unlimited length straight from the hard disk. This makes full use of the
- double buffering, and also keeps statistics on the length of time needed to
- access the disk so that you can keep an eye on its progress and see how much
- time is spare. The other function is monitor_input, which displays a bar
- graph along the top of the screen representing the input levels coming from
- the Sound Blaster. If it reaches 80 characters then you know that you've
- hit the maximum input level (255).
-
- The SB-specific class is called SbDevice. It is derived from SoundDevice, so
- you don't need to call it directly. If you are simply looking for information
- about the details of programming the SB card, you will find everything in
- there. If you intend to use the class you might want to modify some of the
- functions, particularly process_keys which defines what action is taken if
- a key is pressed during the DMA wait.
-
- Two demonstration programs are provided. The first is play_rec.exe which
- will play/record sample files through the Sound Blaster using the file_dma
- function. You can select any sample rate using the "-s" option. Note that
- this isn't a proper .voc or .wav file player. It doesn't read any specific
- file format headers - it just plays the whole file, so you might hear some
- strange noise at the beginning if you're not playing a raw sound file.
-
- The second program is monitor.exe, which (you guessed it) just uses the
- SoundDevice monitor_input function to give you a real-time display of your
- sound input. Note that you can also set the sampling rate in this program,
- which will change the rate of update of the display.
-
-
- Acknowledgements
-
- Much of the specific SB programming details (and some of the code) came from
- the Sound Blaster Freedom Project, available as /pub/msdos/sound/sbf?.zip
- (where ? is the version number). In particular the dma_code.asm file originated
- from there (although I have since modified it) and a few parts of SbDevice.cpp
- contain SBF code. You might like to take a look at the SBF package as a source
- of further information about the Sound Blaster.
-
-
- Distribution policy
-
- You may freely examine/use/modify/distribute this software, as long as you
- leave all attributions intact (ie you can't replace my name with yours and
- redistribute it). If you release any software which is based on (or uses
- ideas from) my code, please include an acknowledgement either in the
- documentation, or the program itself.
-
-
- File contents
-
- readme You're reading it
- sounddev.cpp SoundDevice class
- sbdevice.cpp SbDevice class
- sndclass.h Definitions for all the sound class functions
- dma_code.asm Assembly code for the DMA controller
- play_rec.cpp Source file for play_rec.exe
- play_rec.exe The first demo program
- monitor.cpp Source for monitor.exe
- monitor.exe The second demo program
- makefile How to rebuild the software
-
- The programs are designed for use with Borland C++. If you're using another
- compiler you might have to make a few changes. Note that dma_code.asm uses
- the "Ideal" mode of TASM, which won't go down too well with MASM.
-
- The tab size is meant to be set to something small (eg 2 or 4). Also, make
- sure you select a far data pointer model such as compact or large.
-
-
- Author
-
- Christopher M. Box
- Computer Science Department
- University of Warwick, England.
-
- From October 1993 until July 1996, you should be able to contact me
- indirectly by sending mail to 'J.M.Box@warwick.ac.uk', who will know my
- current address.
-